package com.gobang.domain.entity;

import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import java.time.LocalDateTime;

/**
 * 匹配队列条目实体
 * 用于表示匹配队列中的单个用户条目：用户基本信息+用户队列情况
 *
 * @author gobang-team
 * @since 1.0.0
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MatchQueueEntry {

    /**
     * 用户ID
     * 排队用户的唯一标识
     */
    private Long userId;

    /**
     * 用户积分
     * 用于匹配算法的积分值
     */
    private Integer currentScore;

    /**
     * 加入队列时间
     * 用户加入匹配队列的时间戳
     */
    private LocalDateTime joinTime;

    /**
     * 等待时间（秒）
     * 当前已等待的时间长度
     */
    private Long waitTime;

    /**
     * 匹配阈值
     * 随等待时间动态调整的匹配条件阈值
     */
    private Integer matchThreshold;

    /**
     * 用户名
     * 用于匹配成功后的信息展示
     */
    private String username;

    /**
     * 计算当前等待时间
     *
     * @return 等待时间（秒）
     */
    public long calculateWaitTime() {
        if (joinTime == null) {
            return 0L;
        }
        return java.time.Duration.between(joinTime, LocalDateTime.now()).getSeconds();
    }

    /**
     * 计算动态匹配阈值
     * 根据等待时间动态放宽匹配条件
     *
     * @param baseThreshold 基础阈值
     * @param expandFactor 扩展因子
     * @return 动态匹配阈值
     */
    public int calculateDynamicThreshold(int baseThreshold, double expandFactor) {
        long waitSeconds = calculateWaitTime();
        return (int) (baseThreshold + (waitSeconds * expandFactor));
    }
} 